#pragma once
#include <iostream>
#include <string>
#include <pthread.h>
using namespace std;

// 封装锁
class Mutex {
    public :
    // 构造
    Mutex(pthread_mutex_t* lock) 
        :_lock(lock)
    {}

    // 加锁
    void Lock() {
        pthread_mutex_lock(_lock);
    }

    // 解锁
    void UnLock() {
        pthread_mutex_unlock(_lock);
    }
    // 析构
    ~Mutex() {

    }
    private :
    pthread_mutex_t *_lock;
};



// 再封装一个锁的守护者
class LockGuard {
    public :
    LockGuard(pthread_mutex_t *lock) 
        :_mutex(lock)
    {
        _mutex.Lock();
    }
    ~LockGuard() {
        // cout << "~LockGuard()" << endl;
        _mutex.UnLock();
    }
    private :
    Mutex _mutex;
};
// 这样封装就能够实现枷锁后出了作用域后所自动解除了